home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 5
/
Aminet 5 - March 1995.iso
/
Aminet
/
misc
/
amag
/
AM9402_2.lha
/
blitz-basic
/
listing1.bb2
next >
Wrap
Text File
|
1993-12-30
|
4KB
|
168 lines
;
; Dancing BlitzMan v0.0 by Simon Armstrong
;
NEWTYPE .seg
*kid.seg ;Zeigt auf den ersten Eintrag
*bro.seg ;Verbindet alle Einträge
x.w:y:a
angle.w:length ;Polarkoordinaten fürs Zeichnen
End NEWTYPE
Dim qsin.q(256),qcos.q(256)
Dim List segs.seg(500)
Dim *f.seg(20)
DEFTYPE .seg *myman
Statement readfigure{*temp.seg}
SHARED segs()
Read numkids.w ;nächsten Eintrag lesen
Read *temp\angle
Read *temp\length
*prev.seg=0
For i=1 To numkids ;Nut wenn Kinder existieren
AddItem segs() ;Neues Element holen
segs()\bro=*prev ;Mit Vorgänger verbinden
*prev=segs() ;Vorgänger zum aktuellen machen
readfigure{segs()} ;Und neue Daten lesen
Next
*temp\kid=*prev ;Verbinden aller Einträge
End Statement
Statement drawfigure{x.w,y,a,*temp.seg}
SHARED qsin(),qcos(),ratio,size
USEPATH *temp
;Winkel und berechnete Länge des Glieds einfügen
aa=(a+\angle)&255:slen=\length*size
;Polar- in kartesische Koordinaten konvertieren
xx=x+qcos(aa)*slen:yy=y+qsin(aa)*slen
\x=xx,yy,aa ;Für findpart{} sichern
If \length<0 ;Kreis
WEllipse xx,yy,-slen,-slen*ratio,1
Else
Wline x,y,xx,yy,1 ;Linie
EndIf
;Anfügen eines Kreises, der mit der Maus ange-
;klickt werden kann
WEllipse xx,yy,size*2,size*2*ratio,2
;rekursive Aufrufe der weiteren Glieder
If \kid Then drawfigure{xx,yy,aa,\kid}
If \bro Then drawfigure{x,y,a,\bro}
End Statement
Function.l findpart{x,y,*temp.seg}
DEFTYPE .l result
USEPATH *temp
If RectsHit(x,y,1,1,\x-2,\y-2,5,5) ;Hot-Spot?
Function Return *temp ;Exit
Else
If \kid Then result=findpart{x,y,\kid}
If result Then Function Return result
If \bro Then result=findpart{x,y,\bro}
EndIf
End Statement
;
; Hauptprogramm
;
MaxLen pa$=160 ;Pfad für den Datei-Requester
MaxLen fi$=64 ;Pfad für den Dateinamen
ratio=.5 ;Bildpunktverhältnis Hires Non-Interlace
For i=0 To 255
qsin(i)=Sin(i*Pi/128)*ratio:qcos(i)=Cos(i*Pi/128)
Next
Screen 0,10,"IF I WERE A BLITZMAN"
MenuTitle 0,0,"PROJECT"
MenuItem 0,0,0,0,"LOAD MED ","L"
MenuItem 0,0,0,1,"START MED ","S"
MenuItem 0,0,0,2,"QUIT ","Q"
g=0
For y=0 To 3:For x=0 To 4
PropGadget 0,300+x*64,6+y*32,1,g,60,30:g+1
Next:Next
;Großes Fenster nach hinten
Window 0,0,10,640,246,$1000,"",1,2,0:SetMenu 0
;Editier-Fenster
Window 1,16,14,256,128,$1000,"",1,2:SetMenu 0
SetInt 5:PlayMed:End SetInt
Repeat
ev.l=WaitEvent
Select ev
Case 8
If EventWindow=1 Then Gosub editman
Case $40
If GadgetHit<20 Then Gosub selectframe
Case $100
If MenuHit=0 AND ItemHit=0 Then Gosub loadmed
If MenuHit=0 AND ItemHit=1 Then StartMedModule 0
If MenuHit=0 AND ItemHit=2 Then End
End Select
Forever
.selectframe ;weist *myman den aktuellen oder neuen
;Rahmen zu
gman=GadgetHit
gadgetx=300+(gman MOD 5)*64:gadgety=6+Int(gman/5)*32
If *f(gman)=0
AddItem segs():*f(gman)=segs():Restore mandata:
readfigure{*f(gman)}
EndIf
*myman=*f(gman)
Gosub refreshgman
Return
.refreshgman ;Neu zeichnen eines Rahmens
Use Window 0
WBox gadgetx+4,gadgety+2,gadgetx+55,gadgety+27,0
size=.25:drawfigure {gadgetx+30,gadgety+16,0,*myman}
Use Window 1:InnerCls:size=1:
drawfigure {128,64,0,*myman}
Return
.editman: ;Überprüfen auf korrekten Mausklick
;und modifizieren des Winkels
Use Window 1
*part.seg=findpart{WMouseX,WMouseY,*myman}
If *part<>0
USEPATH *part
wx=WMouseX:wa=\angle:Use Window 1
While Joyb(0)<>0
\angle=wa+wx-WMouseX:InnerCls:
drawfigure {128,64,0,*myman}:VWait 10
Wend
Gosub refreshgman
EndIf
While Joyb(0)<>0 Wend
Return
.loadmed:
a$=FileRequest$("SELECT MED MODULE TO LOAD",pa$,fi$)
If a$<>"" Then LoadMedModule 0,a$
Return
.mandata: ;Anzahl der Verzweigungen,
;Winkel und Länge (13 Glieder)
Data.w 3,0,0 ;Ursprung
Data.w 1,32,40 ;rechter Oberschenkel
Data.w 1,48,40 ;rechter Unterschenkel
Data.w 0,-80,16 ;rechter Fuß
Data.w 1,96,40 ;linker Oberschenkel
Data.w 1,-48,40 ;linker Unterschenkel
Data.w 0,80,16 ;linker Fuß
Data.w 3,192,20 ;Rückgrat
Data.w 1,76,40 ;rechter Oberarm
Data.w 0,32,30 ;rechter Unterarm
Data.w 1,192,40 ;linker Oberarm
Data.w 0,32,30 ;linker Unterarm
Data.w 0,128,-20 ;Kopf